<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //迭代器  interator
        //迭代器是一种接口，为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署interator接口，就可以完成遍历操作
        //  es6创造了 for of 循环，interstor接口主要提供for of 消费

        //工作原理
        //先创建一个指针对象，指向当前数据结构的起始位置
        //然后第一次调用对象的next方法，这个next方法就在对象中，指针自动指向数据结构的第一个成员
        //然后接下来不断调用next方法，指针一直往后移动，直到指向最后一个成员

        // const arr = ['小明','小王','小刘']
        // for (let i of arr){
        //     console.log(i);
        // }

        //for of  循环遍历出来的是数组中的value,  for in 遍历出来的是数组中的key


        //使用迭代器
        // let iterator = arr[Symbol.iterator]();

        //调用对象的next方法
        // console.log(iterator.next());



        //迭代器应用  自定义遍历数据
        //遍历对象中的stus中的成员，使用for of 来遍历
        const obj = {
            name: 'xiao',
            stus: [
                'xiaoming',
                'xiaogang',
                'xiaowang'
            ],
            [Symbol.iterator]() {
                let index = 0;
                let _this = this;
                return {
                    next: function () {
                        if ( index < _this.stus.length) {
                            const result = {value:_this.stus[index],done:false}

                            index++

                            return result;
                        }else{
                            return {value:undefined,done:true}
                        }

                    }
                }
            }

        }

        for (let i of obj) {
            console.log(i);

        }

    </script>
</body>

</html>